package FW.Datos;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
/**
 * @author amedey
 * @version 1.0
 * @created 19-ago-2011 20:56:07
 */
public class AccesoBD implements IAccesoBD {

	private static final String BaseDatos = "jdbc:mysql://localhost:3306/libros";
	private static final String Clave = "";
	private static final String Driver = "com.mysql.jdbc.Driver";
	private static final String Usuario = "root";

	private Connection connection;
	private PreparedStatement statement;

	public void finalize() throws Throwable {

	}

	public AccesoBD(){
		try{
			Class.forName(Driver);
			connection = DriverManager.getConnection(BaseDatos, Usuario, Clave);
		}catch(Exception ex){
			ex.printStackTrace();
		}
	}

	@Override
	public ResultSet EjecutarConsultaConResultado(String consulta,
			Object[] parametros) {
		ResultSet rs = null;
		try {
			crearConsulta(consulta, parametros);
			rs = statement.executeQuery();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return rs;
	}

	/**
	 * @param consulta
	 * @param parametros
	 * @throws SQLException
	 */
	private void crearConsulta(String consulta, Object[] parametros)
			throws SQLException {
		statement = connection.prepareStatement(consulta);
		if(parametros != null)
		{
			for(int i = 1; i <= parametros.length; i++)
			{
				statement.setObject(i, parametros[i-1]);		
			}
		}
	}

	@Override
	public Object EjecutarConsultaConResultadoEscalar(String consulta,
			Object[] parametros) {
		
		Object objeto = null;
		ResultSet rs = null;
		try {
				rs = EjecutarConsultaConResultado(consulta, parametros);
				
				if(rs != null)
				{
					rs.first();
					objeto = rs.getObject(1);
				}
				
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			if(rs != null)
			{
				try {
					rs.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
		}
		
		return objeto;
	}

	@Override
	public void EjecutarConsultaSinResultado(String consulta,
			Object[] parametros) {
		try {
			crearConsulta(consulta, parametros);
			statement.executeUpdate();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

}